package com.itheima.app.manager.umsManager;

import cn.hutool.core.collection.CollUtil;
import com.itheima.commons.R;
import com.itheima.domain.db.ums.UmsAdmin;
import com.itheima.domain.db.ums.UmsMenu;
import com.itheima.domain.db.ums.UmsResource;
import com.itheima.domain.db.ums.UmsRole;
import com.itheima.service.umsService.UmsRoleService;
import com.itheima.vo.PageBeanVo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

@Component
public class UmsRoleManager {

    @DubboReference
    UmsRoleService umsRoleService;

    /*
     * 分页查询用户信息
     * */
    public R findByPage(Integer pageNum, Integer pageSize, String keyword) {


        //2.远程调用service,返回pageBeanVo
        PageBeanVo pageBeanVo = umsRoleService.findAll(pageNum, pageSize, keyword);

        //3.获取pageBeanVo集合
        List<UmsRole> umsRole = (List<UmsRole>) pageBeanVo.getList();

        //6.返回pageBeanVo
        return R.ok(pageBeanVo);

    }


    // 获取全部角色
    public R findAll() {
        List<UmsRole> roleList = umsRoleService.findAllRoles();
        return R.ok(roleList);
    }


    // 创建角色
    public R creatRole(UmsRole umsRole) {

        String name = umsRole.getName();
        UmsRole roleByName = umsRoleService.findRoleByName(name);

        // 角色名称唯一判断
        if (roleByName != null) {
            return R.err( "已添加");
        }
        // 角色未被创建 进行添加角色
        umsRole.setAdminCount(0);
        umsRole.setCreateTime(new Date());
        umsRole.setSort(0);
        umsRole.setAdminCount(0);

        umsRoleService.creatRole(umsRole);
        return R.ok("");
    }

    //禁用角色 修改角色状态
    public R updateRoleStatus(Integer roleId, Integer status) {
        UmsRole umsRole = umsRoleService.findById(roleId);
        if (umsRole != null) {
            umsRole.setStatus(status);
            umsRoleService.updateRoleInfo(umsRole);
            return R.ok("");
        }
        return R.err("修改失败");
    }

    //修改角色信息
    public R updateRoleInfo(Integer roleId, UmsRole umsRole) {
        UmsRole role = umsRoleService.findById(roleId);
        if (role != null) {
            //umsRole.setId(role.getId());
            umsRoleService.updateRoleInfo(umsRole);
            return  R.ok("");
        }
        return  R.err("修改失败");
    }

    //批量删除roles
    public R deleteRoleByIds(List<Long> roleIds) {
        if (CollUtil.isNotEmpty(roleIds)) {
            for (Long roleId : roleIds) {
                // 根据roleId查询当前角色
                UmsRole umsRole = umsRoleService.findById(roleId.intValue());
                if (umsRole.getAdminCount() > 0){
                    // 不等于null 说明该角色有 用户正在使用 不能删除
                    return  R.err("有角色处于正在使用的状态，无法删除");
                }
            }
            // 循环结束说明 roleIds都是可以删除的
            umsRoleService.deleteRoleByIds(roleIds);
            return R.ok("");
        }

        return null;
    }

    //获取角色相关菜单
    public R findRoleMenu(Long roleId) {
        List<UmsMenu> umsMenus = umsRoleService.findRoleMenu(roleId);
        return R.ok(umsMenus);
    }


    // 给角色分配菜单
    public R roleAllocMenu(Long roleId, List<Long> menuIds) {
        umsRoleService.roleAllocMenu(roleId, menuIds);
        return R.ok("");
    }

    //获取指定角色角色相关资源
    public R findRoleResourceListByRoleId(Long roleId) {
        List<UmsResource> umsResourceList =  umsRoleService.findRoleResourceListByRoleId(roleId);
        return R.ok(umsResourceList);
    }

    //给指定角色分配资源
    public R roleAllocResource(Long roleId, List<Long> resourceIds) {
        umsRoleService.roleAllocResource(roleId,resourceIds);
        return R.ok("");
    }


}
